Index: main/plugin-cms/plugin.xml
===================================================================
--- main/plugin-cms/plugin.xml	(revision 19001)
+++ main/plugin-cms/plugin.xml	(working copy)
@@ -289,6 +289,10 @@
 			           class="org.ametys.cms.workflow.SetCurrentStepFunction">
 			    <!-- Workflow function for setting the current step id on a content -->
 			</component>
+			<component role="org.ametys.cms.workflow.CreateVersionFunction"
+			           class="org.ametys.cms.workflow.CreateVersionFunction">
+			    <!-- Workflow function for creating a new version on a content -->
+			</component>
             <component role="org.ametys.cms.workflow.ValidateMetadataCondition"
                        class="org.ametys.cms.workflow.ValidateMetadataCondition">
 	            <!-- Workflow condition for checking lock against a content -->
Index: main/plugin-cms/src/org/ametys/cms/workflow/SetCurrentStepFunction.java
===================================================================
--- main/plugin-cms/src/org/ametys/cms/workflow/SetCurrentStepFunction.java	(revision 19001)
+++ main/plugin-cms/src/org/ametys/cms/workflow/SetCurrentStepFunction.java	(working copy)
@@ -20,7 +20,6 @@
 import org.apache.avalon.framework.activity.Initializable;
 
 import org.ametys.cms.repository.WorkflowAwareContent;
-import org.ametys.cms.workflow.AbstractContentWorkflowComponent;
 import org.ametys.plugins.workflow.Workflow;
 
 import com.opensymphony.module.propertyset.PropertySet;
@@ -48,9 +47,9 @@
          
         if (content != null)
         {
+            // Save the current step
             Step currentStep = (Step) _workflow.getCurrentSteps(content.getWorkflowId()).iterator().next();
             content.setCurrentStepId(currentStep.getStepId());
-            
             content.saveChanges();
         }    
     }
Index: main/plugin-cms/src/org/ametys/cms/workflow/CreateContentFunction.java
===================================================================
--- main/plugin-cms/src/org/ametys/cms/workflow/CreateContentFunction.java	(revision 19001)
+++ main/plugin-cms/src/org/ametys/cms/workflow/CreateContentFunction.java	(working copy)
@@ -37,7 +37,6 @@
 import org.ametys.plugins.repository.RepositoryConstants;
 import org.ametys.plugins.repository.RepositoryIntegrityViolationException;
 import org.ametys.plugins.repository.collection.AmetysObjectCollection;
-import org.ametys.plugins.repository.version.VersionableAmetysObject;
 import org.ametys.plugins.workflow.store.JackrabbitWorkflowStore;
 
 import com.opensymphony.module.propertyset.PropertySet;
@@ -125,9 +124,6 @@
             
             session.save();
             
-            // Creates the first version
-            ((VersionableAmetysObject) content).checkpoint();
-            
             _observationManager.notify(new Event(getUser(transientVars), ObservationConstants.CONTENT_ADDED, content));
             
             // Content created
Index: main/plugin-cms/src/org/ametys/cms/workflow/CreateVersionFunction.java
===================================================================
--- main/plugin-cms/src/org/ametys/cms/workflow/CreateVersionFunction.java	(revision 0)
+++ main/plugin-cms/src/org/ametys/cms/workflow/CreateVersionFunction.java	(revision 0)
@@ -0,0 +1,47 @@
+/*
+ *  Copyright 2012 Anyware Services
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.ametys.cms.workflow;
+
+import java.util.Map;
+
+import org.ametys.cms.repository.WorkflowAwareContent;
+import org.ametys.plugins.repository.version.VersionableAmetysObject;
+
+import com.opensymphony.module.propertyset.PropertySet;
+import com.opensymphony.workflow.FunctionProvider;
+import com.opensymphony.workflow.WorkflowException;
+
+/**
+ * Creates a new version
+ *
+ */
+public class CreateVersionFunction extends AbstractContentWorkflowComponent implements FunctionProvider
+{
+    @Override
+    public void execute(Map transientVars, Map args, PropertySet ps) throws WorkflowException
+    {
+        WorkflowAwareContent content = getContent(transientVars);
+         
+        if (content != null)
+        {
+            // Create a new version
+            if (content instanceof VersionableAmetysObject)
+            {
+                ((VersionableAmetysObject) content).checkpoint();
+            }
+        }    
+    }
+}
Index: main/plugin-cms/src/org/ametys/cms/workflow/EditContentFunction.java
===================================================================
--- main/plugin-cms/src/org/ametys/cms/workflow/EditContentFunction.java	(revision 19001)
+++ main/plugin-cms/src/org/ametys/cms/workflow/EditContentFunction.java	(working copy)
@@ -62,7 +62,6 @@
 import org.ametys.plugins.repository.metadata.ModifiableRichText;
 import org.ametys.plugins.repository.metadata.UnknownMetadataException;
 import org.ametys.plugins.repository.metadata.jcr.JCRCompositeMetadata;
-import org.ametys.plugins.repository.version.VersionableAmetysObject;
 import org.ametys.runtime.upload.Upload;
 import org.ametys.runtime.upload.UploadManager;
 import org.ametys.runtime.util.I18nizableText;
@@ -162,9 +161,6 @@
             // Commit changes
             modifiableContent.saveChanges();
             
-            // Create a new version
-            ((VersionableAmetysObject) modifiableContent).checkpoint();
-            
             // Notify the observers of the modification.
             _observationManager.notify(new Event(getUser(transientVars), ObservationConstants.CONTENT_MODIFIED, modifiableContent));
             
Index: main/plugin-cms/src/org/ametys/cms/workflow/ContentWorkflowAction.java
===================================================================
--- main/plugin-cms/src/org/ametys/cms/workflow/ContentWorkflowAction.java	(revision 19001)
+++ main/plugin-cms/src/org/ametys/cms/workflow/ContentWorkflowAction.java	(working copy)
@@ -84,10 +84,6 @@
             
                 lockManager.addLockToken(lockHolder.getProperty(RepositoryConstants.METADATA_LOCKTOKEN).getString());
             }
-            
-            Step currentStep = (Step) _workflow.getCurrentSteps(content.getWorkflowId()).iterator().next();
-            content.setCurrentStepId(currentStep.getStepId());
-            content.saveChanges();
         }
         catch (RepositoryException e)
         {